Skip to content

feat: capacidad de transporte (TransportCapacity) — núcleo + persistencia (#105)#148

Closed
vgpastor wants to merge 1 commit into
mainfrom
claude/festive-mccarthy-9gfvmx
Closed

feat: capacidad de transporte (TransportCapacity) — núcleo + persistencia (#105)#148
vgpastor wants to merge 1 commit into
mainfrom
claude/festive-mccarthy-9gfvmx

Conversation

@vgpastor

@vgpastor vgpastor commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

Parte de #105 (EPIC #103). Backend de dominio + persistencia del contexto nuevo logistics. No cierra #105: el HTTP + frontend + gen:api se finalizan en local (ver abajo).

Qué hace

La capacidad de transporte = oferta de un servicio logístico (mover carga de A a B), distinta del agregado de material DonationOffer. Es la capa 2 ("QUÉ capacidad") del EPIC, y donde encaja el feedback original (la camioneta / las toneladas de la aerolínea).

Dominio (logistics/domain)

  • Agregado TransportCapacity: proveedor polimórfico (volunteer/organization), mode (road/sea/air — moto/coche/camioneta = road), capacidad (weightKg/volumeM3, al menos uno > 0), corredor (originMunicipalitydestinationMunicipality opcional) o área, ventana (availableFrom/availableUntil), refrigerated.
  • Máquina de estados available → reserved → (release) → available y → withdrawn, con invariantes y errores de dominio.

Aplicación

  • PublishCapacity (valida que la emergencia esté activa, vía port), WithdrawCapacity, ListCapacities (vistas serializables, filtros por modo/estado).

Persistencia

  • InMemoryTransportCapacityRepository + DrizzleTransportCapacityRepository + tabla transport_capacities (migración 0027) + int-spec.

Verificación

  • ✅ Local: pnpm --filter api build (tsc) · eslint · prettier · 14 tests de dominio+aplicación (in-memory, sin DB).
  • 🔄 CI: ejecuta además el int-spec + la migración contra Postgres real.

Pendiente de finalizar en local (necesita Postgres+Redis)

  • Controller/módulo HTTP + DTOs (POST /…/transport-capacities, GET …, POST …/withdraw) y registro en app.module.
  • pnpm gen:api → commit de schema.ts.
  • Frontend "Ofrezco transporte" + i18n.
  • (Estos pasos arrancan el AppModule / consumen el cliente tipado, que el sandbox no puede correr.)

Coordinación

…ncia (#105)

Núcleo del contexto logistics (parte de #105, EPIC #103): oferta de servicio de
transporte (no de material), distinta de offers.

- Dominio: agregado TransportCapacity (proveedor voluntario/organización, modo
  road/sea/air, capacidad peso/volumen, corredor origen->destino o área, ventana
  y refrigerado) con máquina de estados available->reserved/withdrawn.
- Aplicación: PublishCapacity (valida emergencia activa), WithdrawCapacity y
  ListCapacities (vistas serializables, filtros por modo/estado).
- Persistencia: repo en memoria + repo drizzle + tabla transport_capacities
  (migración 0027) + int-spec.

Tests de dominio y aplicación (in-memory) verdes en local; el int-spec y la
migración los ejecuta CI contra Postgres.

Pendiente de finalizar en local (necesita infra): controller/módulo HTTP + DTOs,
pnpm gen:api (cliente tipado) y el frontend. No cierra #105 (solo backend de
dominio/persistencia).
@vercel

vercel Bot commented Jun 28, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
response-grid Skipped Skipped Jun 28, 2026 7:20pm

Request Review

Copy link
Copy Markdown
Contributor Author

Cierro como duplicado. Mientras preparaba esta PR, otra sesión ya implementó y fusionó el contexto logistics en main: TransportCapacity (#132), Shipment (#133) y matching (#134), con sus frontends (#136#138). Esa implementación es un superconjunto de esta (value objects Capacity/Coverage/CapacityWindow, autorización en el retiro, eventos de dominio, controllers HTTP y frontend), y se solapa en las mismas rutas apps/api/src/contexts/logistics/… y en la migración (su 0028_transport_capacity.sql). No aporta nada sobre main.


Generated by Claude Code

@vgpastor vgpastor closed this Jun 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants